1. Field of Invention
The present application relates to software applications and their environments and more specifically optimized virtual environments for software applications.
2. Related Art
Currently, applications require specific environments in which to execute. For example, applications are usually constructed with a specific operating system environment in mind, and migrating to a different operating system environment requires a different version of the application. In addition to operating system environments, there are also specific hardware requirements associated with applications. At the base level, an application compiled for use on a specific instruction set architecture (ISA) will be unable to execute on a machine with a different ISA.
Commonly used routines are frequently encapsulated in libraries configured to be accessed by applications. These libraries are generally shared among many different applications, allowing the software developer to leverage common functionality and reduce the application's file size. This approach is advantageous when a number of different applications make use of the same commonly used routines. The libraries that an application uses, but are not included with the distribution of the application, need to be present in the application's executing environment to execute the application as intended
It is common practice to provide a wide variety of libraries and/or individual helper routines in an operating environment in order to support a wide variety of applications. Together these supporting elements comprise a general runtime environment that provides software services for processes or programs while a computer is running. The general runtime environment may further include an operating system, an associated kernel, and software that runs beneath the operating system, such as hardware and/or device drivers.
A general runtime environment may include many components that are not required by those applications that are actually executed. This may be a disadvantage in circumstances that include limits on available memory or other resources consumed by the unused components, or when the extra components conflict with each other.
In some instances a general runtime environment is contained within a virtual machine environment. A virtual machine environment is an environment that appears from the point of view of a software application within the virtual machine environment to be an independent hardware device. However, more than one virtual machine environment may be placed on a single hardware device. Each virtual machine environment may have different characteristics. This allows the single hardware device to support multiple applications or multiple copies of the same application each within their own isolated virtual machine environment.
In the prior art, a virtual machine environment is typically characterized by a virtual machine specification and a configuration file that contains the contents of a virtual disk. For example, VMware, Inc. of Palo Alto, Calif. supplies virtual machine products that are defined in a Virtual Machine Disk Format (VMDK). These products may be used to run several virtual machine environments on a single hardware device. Typically, the VMDK includes a disk image of an application, support files, and an associated operating system. The VMDK is a portable image that can be placed in a virtual machine container. The configuration file includes the specification of the virtual machine container in which this disk image is placed. For example, the configuration file may include an amount of memory and I/O resources to be included in the container. The virtual machine container determines the virtual machine environment experienced by the disk image.
Generation of the VMDK is typically a multi-step process in which an operating system is first installed on a clean hard disk, support files such as drivers and libraries are installed, and then an application is installed on the hard disk, in a step-by-step process. A snapshot of the disk and machine state may be taken between each step, each snapshot resulting in a disk image and corresponding machine state. After installation of the application, the image of the disk is used as a VMDK and installed in one or more virtual machine container. Each VMDK includes a full operating system and set of support files, just as in a general runtime environment that is not disposed within a virtual machine. Virtual machine environments can therefore have many of the same disadvantages as general runtime environments.